package com.itheima.d5_map_traverse;
import java.util.*;


/**
 * 目标：掌握Map集合的第二种遍历方式：键值对。
 *      把“键值对“看成一个整体进行遍历（难度较大），因为遍历的元素类型无法确定
 *
 *      for (元素类型 变量: 集合){
 *      ...}
 *      for (元素类型 kv: map){
 *      ...}
 *
 *      Set<Map.Entry<K, V>> entrySet():
 *          该方法会把map集合中的每个键值对都封装成一个所谓的entry对象，这样map的键值对就存在元素类型了
 *          然后该方法会把封装好的键值对对象放到一个set集合中，以Set< Map.Entry<String, Double> >集合的类型返回。
 *          set集合里面放的就是entry对象，也就是Map.Entry<String, Double> 类型
 *
 *   Map提供的方法：Set<Map.Entry<K, V>> entrySet()   获取所有“键值对”的集合
 *   Map.Entry提供的方法 ：
 *          K  getKey()     获取键
 *          V  getValue()   获取值
 */
public class MapTest2 {
    public static void main(String[] args) {
        Map<String, Double> map = new HashMap<>();
        map.put("蜘蛛精", 169.8);
        map.put("紫霞", 165.8);
        map.put("至尊宝", 169.5);
        map.put("牛魔王", 183.6);
        System.out.println(map);
        // map = {蜘蛛精=169.8, 牛魔王=183.6, 至尊宝=169.5, 紫霞=165.8}
        //就是把map集合的键值封装成一个个对象，然后把每个对象装到set集合里:
        // entries = [(蜘蛛精=169.8), (牛魔王=183.6), (至尊宝=169.5), (紫霞=165.8)]
        //                                                         entry

        // 1、调用Map集合提供entrySet方法，把Map集合转换成键值对类型的Set集合
        //Set<Map.Entry<K, V>> entrySet()   获取所有“键值对”的集合
        Set<Map.Entry<String, Double>> entries = map.entrySet();
        for (Map.Entry<String, Double> entry : entries) {
            //获取键
            String key = entry.getKey();
            //获取值
            double value = entry.getValue();
            System.out.println(key + "---->" + value);
        }

        System.out.println("---------------------");

        //自己写一遍
        Set<Map.Entry<String,Double>> zeng = map.entrySet();
        for (Map.Entry<String, Double> entry : zeng) {
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
}
